package com.wdj.library.dao;

import com.wdj.library.entity.BookInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * 书籍(BookInfo)表数据库访问层
 *
 * @author wdj
 * @since 2020-08-12 11:53:57
 */
@Mapper
public interface BookInfoDao {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    BookInfo queryById(Integer id);

    /**
     * @Author wdj
     * @Description //TODO
     * @Date 10:30 2020/8/14
     * @Param [bookName]
     * @return com.wdj.library.entity.BookInfo
     **/
    @Select("select * from book_info where book_name like concat('%',#{bookName},'%')")
    BookInfo queryByBookName(@Param("bookName") String bookName);
    /**
     * @Author wdj
     * @Description //TODO 减少剩余量
     * @Date 16:58 2020/8/14
     * @Param [id]
     * @return int
     **/
    @Update("update book_info set remain_num = remain_num-1 where id = #{id}")
    int updateSubRemain(Integer id);

    /**
     * @Author wdj
     * @Description //TODO 增加剩余量
     * @Date 16:58 2020/8/14
     * @Param [id]
     * @return int
     **/
    @Update("update book_info set remain_num = remain_num+1 where id = #{id}")
    int updateAddRemain(Integer id);

    /**
     * 查询指定行数据
     *
     * @param offset 查询起始位置
     * @param limit 查询条数
     * @return 对象列表
     */
    List<BookInfo> queryAllByLimit(@Param("offset") int offset, @Param("limit") int limit);


    /**
     * 通过实体作为筛选条件查询
     *
     * @param bookInfo 实例对象
     * @return 对象列表
     */
    List<BookInfo> queryAll(BookInfo bookInfo);

    /**
     * 新增数据
     *
     * @param bookInfo 实例对象
     * @return 影响行数
     */
    int insert(BookInfo bookInfo);

    /**
     * 修改数据
     *
     * @param bookInfo 实例对象
     * @return 影响行数
     */
    int update(BookInfo bookInfo);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 影响行数
     */
    int deleteById(Integer id);

}